package org.zergle.lex;

/**
 * 词法分析记号
 * 
 * @author Johnson.Lee
 * 
 */
public class Token {
	/**
	 * 行号
	 */
	public int line;

	/**
	 * 列号
	 */
	public int column;
	
	/**
	 * 输入流定位
	 */
	public long position;

	/**
	 * Token的类型
	 */
	public Enum type;

	/**
	 * 内容
	 */
	public String image;

	/**
	 * 此<code>Token</code>的前一个<code>Token</code>
	 */
	public Token previous;

	/**
	 * 此<code>Token</code>的下一个<code>Token</code>
	 */
	public Token next;

	/**
	 * 默认构造
	 */
	public Token() {
	}

	/**
	 * 全参构造
	 * 
	 * @param line
	 *            行号
	 * @param column
	 *            列号
	 * @param type
	 *            <code>Token</code>类型
	 * @param image
	 *            内容
	 */
	public Token(int line, int column, Enum<?> type, String image) {
		super();
		this.line = line;
		this.column = column;
		this.type = type;
		this.image = image;
	}

	/**
	 * 返回此Token的字符串形式
	 * 
	 * @return 此Token的字符串形式
	 */
	public String toString() {
		return "<" + this.type + ", " + this.image + "> @ line:" + this.line
				+ ", column:" + this.column;
	}

}
